home *** CD-ROM | disk | FTP | other *** search
- /********************************************************************
- * *
- * Cookie information *
- * *
- * Copyright (C) 1994, Bitgate Software and Clever Bits. *
- * All rights reserved. *
- * *
- * This information was taken from GEMView, with all due respects. *
- * *
- * These routines are designed to create your own cookies, and to *
- * handle the cookie jar information. Since WinLIB will eventually*
- * install its own cookie, these routines need to be bug-fixed. *
- * *
- ********************************************************************/
-
- #include <stddef.h>
- #include <tos.h>
- #include "winlib.h"
-
- #ifndef __COOKIES__
- #define __COOKIES__
- #endif
-
- COOKIE *MainCJar;
-
- GLOBAL long *get_cookiejar(void)
- {
- register long old_stack, *jar;
-
- old_stack = (long) Super(0L);
- jar = *((long **) 0x5A0L);
- Super((long *) old_stack);
- return(jar);
- }
-
- GLOBAL void create_cookie(COOKIE *cookie, long id, long value)
- {
- *((long *) cookie)++ = id;
- *((long *) cookie) = value;
- }
-
- GLOBAL int new_cookie(COOKIE *ent)
- {
- register long *cookiejar = get_cookiejar();
- register int act_row = 0;
-
- if (cookiejar) {
- while(*cookiejar) {
- cookiejar += 2;
- act_row++;
- }
-
- if (act_row < cookiejar[1]) {
- cookiejar[2] = cookiejar[0];
- cookiejar[3] = cookiejar[1];
-
- *cookiejar++ = *((long *) ent)++;
- *cookiejar = *((long *) ent);
- return(TRUE);
- }
- }
- return(FALSE);
- }
-
- GLOBAL int get_cookie(long cookie, long *value)
- {
- register long *cookiejar = get_cookiejar();
-
- if (cookiejar) {
- do {
- if (*cookiejar == cookie) {
- if (value) *value = *++cookiejar;
- return(TRUE);
- }
- cookiejar += 2;
- } while(*++cookiejar);
- }
- return(FALSE);
- }
-
- GLOBAL int locate_cookie(long cookie)
- {
- register long *cookiejar = get_cookiejar();
-
- if (cookiejar) {
- do {
- if (*cookiejar == cookie)
- return TRUE;
-
- cookiejar += 2;
- } while (*++cookiejar);
- }
-
- return FALSE;
- }
-
- GLOBAL void remove_cookie(long cookie_id)
- {
- register long *cookiejar = get_cookiejar();
-
- if (cookiejar) {
- while (*cookiejar && cookiejar[1]!=cookie_id)
- cookiejar += 2;
-
- if (*cookiejar) {
- do {
- *cookiejar++ = cookiejar[2];
- *cookiejar = cookiejar[2];
- } while(*cookiejar);
- }
- }
- }
-
- GLOBAL void move_cookiejar(long *dest, long size)
- {
- register long old_stack, *cookiejar, *dest_cop;
-
- old_stack = (long) Super(0L);
- cookiejar = *((long **) 0x5A0L);
-
- if (cookiejar) {
- dest_cop = dest;
-
- do {
- *dest++ = *cookiejar++;
- *dest++ = *cookiejar++;
- } while (*cookiejar);
-
- *dest++ = *cookiejar;
- *dest = size;
-
- cookiejar = (long *) 0x5A0L;
- *cookiejar = (long) dest_cop;
- }
- Super((long *) old_stack);
- }
-
- GLOBAL long cookie_size()
- {
- register long *cookiejar = get_cookiejar();
-
- if (cookiejar) {
- while(*cookiejar) cookiejar += 2;
- return(*++cookiejar);
- }
- return(0);
- }
-
- GLOBAL COOKIE *find_cookie(long id)
- {
- long *jar;
-
- if (((long *)jar = get_cookiejar()) == 0)
- return(0);
-
- while(*jar) {
- if(*jar == id) return((COOKIE *)jar);
- jar += 2;
- }
-
- return(0);
- }
-
- GLOBAL void InitCookies(void)
- {
- (long *) MainCJar = get_cookiejar();
- }
-